<!DOCTYPE html>
<html>
<head>
<title>5.2</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
/* GitHub stylesheet for MarkdownPad (http://markdownpad.com) */
/* Author: Nicolas Hery - http://nicolashery.com */
/* Version: b13fe65ca28d2e568c6ed5d7f06581183df8f2ff */
/* Source: https://github.com/nicolahery/markdownpad-github */

/* RESET
=============================================================================*/

html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
  margin: 0;
  padding: 0;
  border: 0;
}

/* BODY
=============================================================================*/

body {
  font-family: Helvetica, arial, freesans, clean, sans-serif;
  font-size: 14px;
  line-height: 1.6;
  color: #333;
  background-color: #fff;
  padding: 20px;
  max-width: 960px;
  margin: 0 auto;
}

body>*:first-child {
  margin-top: 0 !important;
}

body>*:last-child {
  margin-bottom: 0 !important;
}

/* BLOCKS
=============================================================================*/

p, blockquote, ul, ol, dl, table, pre {
  margin: 15px 0;
}

/* HEADERS
=============================================================================*/

h1, h2, h3, h4, h5, h6 {
  margin: 20px 0 10px;
  padding: 0;
  font-weight: bold;
  -webkit-font-smoothing: antialiased;
}

h1 tt, h1 code, h2 tt, h2 code, h3 tt, h3 code, h4 tt, h4 code, h5 tt, h5 code, h6 tt, h6 code {
  font-size: inherit;
}

h1 {
  font-size: 28px;
  color: #000;
}

h2 {
  font-size: 24px;
  border-bottom: 1px solid #ccc;
  color: #000;
}

h3 {
  font-size: 18px;
}

h4 {
  font-size: 16px;
}

h5 {
  font-size: 14px;
}

h6 {
  color: #777;
  font-size: 14px;
}

body>h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h4:first-child, body>h5:first-child, body>h6:first-child {
  margin-top: 0;
  padding-top: 0;
}

a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
  margin-top: 0;
  padding-top: 0;
}

h1+p, h2+p, h3+p, h4+p, h5+p, h6+p {
  margin-top: 10px;
}

/* LINKS
=============================================================================*/

a {
  color: #4183C4;
  text-decoration: none;
}

a:hover {
  text-decoration: underline;
}

/* LISTS
=============================================================================*/

ul, ol {
  padding-left: 30px;
}

ul li > :first-child, 
ol li > :first-child, 
ul li ul:first-of-type, 
ol li ol:first-of-type, 
ul li ol:first-of-type, 
ol li ul:first-of-type {
  margin-top: 0px;
}

ul ul, ul ol, ol ol, ol ul {
  margin-bottom: 0;
}

dl {
  padding: 0;
}

dl dt {
  font-size: 14px;
  font-weight: bold;
  font-style: italic;
  padding: 0;
  margin: 15px 0 5px;
}

dl dt:first-child {
  padding: 0;
}

dl dt>:first-child {
  margin-top: 0px;
}

dl dt>:last-child {
  margin-bottom: 0px;
}

dl dd {
  margin: 0 0 15px;
  padding: 0 15px;
}

dl dd>:first-child {
  margin-top: 0px;
}

dl dd>:last-child {
  margin-bottom: 0px;
}

/* CODE
=============================================================================*/

pre, code, tt {
  font-size: 12px;
  font-family: Consolas, "Liberation Mono", Courier, monospace;
}

code, tt {
  margin: 0 0px;
  padding: 0px 0px;
  white-space: nowrap;
  border: 1px solid #eaeaea;
  background-color: #f8f8f8;
  border-radius: 3px;
}

pre>code {
  margin: 0;
  padding: 0;
  white-space: pre;
  border: none;
  background: transparent;
}

pre {
  background-color: #f8f8f8;
  border: 1px solid #ccc;
  font-size: 13px;
  line-height: 19px;
  overflow: auto;
  padding: 6px 10px;
  border-radius: 3px;
}

pre code, pre tt {
  background-color: transparent;
  border: none;
}

kbd {
    -moz-border-bottom-colors: none;
    -moz-border-left-colors: none;
    -moz-border-right-colors: none;
    -moz-border-top-colors: none;
    background-color: #DDDDDD;
    background-image: linear-gradient(#F1F1F1, #DDDDDD);
    background-repeat: repeat-x;
    border-color: #DDDDDD #CCCCCC #CCCCCC #DDDDDD;
    border-image: none;
    border-radius: 2px 2px 2px 2px;
    border-style: solid;
    border-width: 1px;
    font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
    line-height: 10px;
    padding: 1px 4px;
}

/* QUOTES
=============================================================================*/

blockquote {
  border-left: 4px solid #DDD;
  padding: 0 15px;
  color: #777;
}

blockquote>:first-child {
  margin-top: 0px;
}

blockquote>:last-child {
  margin-bottom: 0px;
}

/* HORIZONTAL RULES
=============================================================================*/

hr {
  clear: both;
  margin: 15px 0;
  height: 0px;
  overflow: hidden;
  border: none;
  background: transparent;
  border-bottom: 4px solid #ddd;
  padding: 0;
}

/* TABLES
=============================================================================*/

table th {
  font-weight: bold;
}

table th, table td {
  border: 1px solid #ccc;
  padding: 6px 13px;
}

table tr {
  border-top: 1px solid #ccc;
  background-color: #fff;
}

table tr:nth-child(2n) {
  background-color: #f8f8f8;
}

/* IMAGES
=============================================================================*/

img {
  max-width: 100%
}
</style>
<!-- <script src="http://code.jquery.com/jquery-1.7.2.min.js"></script> -->
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<script src="http://yandex.st/highlightjs/6.2/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
<!--侧栏目录生成代码-->
<script>
    //标题序号计数器
    var hCount = [0, 0, 0, 0, 0, 0];
    //设置计数器
    function setHCount(number) {
        //当前计数器加一
        hCount[number - 1]++;
        for (var i = number, length = hCount.length; i < length; i++) {
            //子目录计数器全部置零
            hCount[i] = 0;
        }
    }
    //重命名目录名称
    function setHTagValue(item, number) {
        //获取标题名
        var text = $(item).get(0).innerHTML;
        //初始化空字符串
        var before = "";
        //生成序号
        for (var i = 0, length = hCount.length; i < number; i++) {
            if (i < number - 1)
                before += hCount[i] + ".";
            else
                before += hCount[i] + " ";
        }
        //在标题前面加上序号
        $(item).get(0).innerHTML = before + text;
    }
    function renameHTag(item) {
        var tag = $(item).get(0).localName;
        if (tag === "h1") {
            setHCount(1);
           //console\.log("捕获到标签:%s", tag);
            setHTagValue(item, 1);
        }
        if (tag === "h2") {
            setHCount(2);
            //console.log("捕获到标签:%s", tag);
            setHTagValue(item, 2);
        }
        if (tag === "h3") {
            setHCount(3);
            //console.log("捕获到标签:%s", tag);
            setHTagValue(item, 3);
        }
        if (tag === "h4") {
            setHCount(4);
            //console.log("捕获到标签:%s", tag);
            setHTagValue(item, 4);
        }
        if (tag === "h5") {
            setHCount(5);
            //console.log("捕获到标签:%s", tag);
            setHTagValue(item, 5);
        }
        if (tag === "h6") {
            setHCount(6);
            //console.log("捕获到标签:%s", tag);
            setHTagValue(item, 6)
        }
    }
    $(document).ready(function () {
        $("h1,h2,h3,h4,h5,h6").each(function (i, item) {
            //给<H>类标签编号
            //renameHTag(item);
            //获取标签的名字,h1,还是h2
            var tag = $(item).get(0).localName;
            //为该标签设置id属性
            $(item).attr("id", "wow" + i);
            //添加一个页内超链接,并设置class选择器
            //      $("#category").append('<a class="new'+tag+'" href="#wow'+i+'">'+$(this).text()+'</a></br>');
            $("#category").append('<a class="new' + tag + '" href="#wow' + i + '">' + $(item).text() + '</a></br>');
            //为每一个标题超链接的class属性设置左边距
            $(".newh1").css("margin-left", 0);
            $(".newh2").css("margin-left", 20);
            $(".newh3").css("margin-left", 40);
            $(".newh4").css("margin-left", 60);
            $(".newh5").css("margin-left", 80);
            $(".newh6").css("margin-left", 100);
        });
        //设置class选择器为.book-body的html内容
        $(".book-body").html($(".book-body").nextAll())
    });
</script>
<style type="text/css">
    @media (max-width: 1600px) {
        .book-body {
            /* padding-left: 200px; */
            padding-right: 0px;
        }
    }
    @media (max-width: 1400px) {
        .book-body {
            /* padding-left: 200px; */
            padding-right: 0px;
        }
    }
    @media (max-width: 1200px) {
        .book-body {
            /* padding-left: 300px; */
            padding-left: 0px;
        }
    }
    @media (max-width: 700px) {
        .book-body {
            padding-left: 0px;
        }
    }
    @media (min-width: 600px) {
        #category {
            /* 绝对定位 */
            position: fixed;
            /* left: 20px; */
            /* 目录显示的位置 */
            right: 0px;
            top: 0;
            /* 目录栏的高度,这里设置为60%主要是为了不挡住返回顶部和折叠按钮 */
            height: 79%;
            /* 开启垂直滚动条 */
            overflow-y: scroll;
            /* 开启水平滚动条 */
            overflow-x: scroll;
        }
    }
    @media (-webkit-max-device-pixel-ratio: 1) {
        ::-webkit-scrollbar-track-piece {
            background-color: #FFF
        }
        ::-webkit-scrollbar {
            width: 6px;
            height: 6px
        }
        ::-webkit-scrollbar-thumb {
            background-color: #c2c2c2;
            background-clip: padding-box;
            min-height: 28px
        }
        ::-webkit-scrollbar-thumb:hover {
            background-color: #A0A0A0
        }
    }
</style>
<script>
    // id="category" onclick="showOrCloseCategory()"
    function showOrCloseCategory() {
        var id = document.getElementById("category");
        var book_body=document.getElementById("book_body");
        //如果展开了
        if (id.style.display == 'block') {
            //console.log("开始展开");
            id.style.display='none';
            id.style.width="0%";
            book_body.style.width="100%";
            book_body.style.paddingleft=0;
        }
        //如果被折叠了
        else if (id.style.display =='none') {
            //console.log("开始折叠");
            id.style.display = 'block';
            book_body.style.width="90%";
            id.style.width="20%"
        }
    }
</script>
<!--返回顶部-->
<a href="javascript:scroll(0,0)" style="position:fixed;float:right;right:40px;top:80%">返回顶部</a>
<button onclick="showOrCloseCategory()" style="position:fixed;float:right;right:40px;top:85%">折叠/展开</button>
<!--文章主体部分-->
<div class="book-body" id="book_body" style="width:90%;display:block"> </div>
<!--目录栏，设置占用宽度为20%可以根据实际情况设置-->
<div  class="book-summary" id="category" style="width:20%;display:block" ></div>

</head>
<body>
<h2>07 redis 安装（kong注册中心）</h2>
<h4>1. 前期的准备工作</h4>
<ul>
<li>系统本版为: centos 7 64位</li>
<li>redis版本为: &gt; redis-3.2.11</li>
</ul>
<blockquote>
<p>相关的服务器信息(四台): http://download.redis.io/releases/</p>
<blockquote>
<p>192.168.254.131 (master)<br/> 
192.168.254.132 (slave1)<br/>
192.168.254.133 (slave2)<br/>
192.168.254.135 (redis sentinel)</p>
</blockquote>
</blockquote>
<h4>2. 关于关于redis配置文件详情</h4>
<pre><code>bind 0.0.0.0        #绑定ip访问
protected-mode no   #安全,如果YES只允许localhost访问
port 6379           #端口
tcp-backlog 10000   #此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度， 当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值，默认是511,但生产一般设置为65535; (影响并发)
timeout 0           #设置客户端连接时的超时时间，单位为秒。当客户端在这段时间内没有发出任何指令，那么关闭该连接，0是关闭此设置
tcp-keepalive 300   #单位是秒，表示将周期性的使用SO_KEEPALIVE检测客户端是否还处于健康状态，避免服务器一直阻塞，官方给出的建议值是300s，如果设置为0，则不会周期性的检测
daemonize yes       #是否开启在后台运行redis,默认为no,不开启
unixsocket /data/redis/redis.sock  #指定redis监听的unix socket路径，默认不启用，unixsocketper指定文件的权限
unixsocketperm 700 
requirepass foobared   #设置密码
masterauth foobared    #连接主的密码

maxclients 10000        #最大连接请求               
supervised no       
    #可以通过upstart和systemd管理Redis守护进程
    #选项：
    #supervised no - 没有监督互动
    #supervised upstart - 通过将Redis置于SIGSTOP模式来启动信号
    #supervised systemd - signal systemd将READY = 1写入$ NOTIFY_SOCKET
    #supervised auto - 检测upstart或systemd方法基于 UPSTART_JOB或NOTIFY_SOCKET环境变量
pidfile /data/redis/redis_6379.pid  #进程pid文件
loglevel notice                     #日志级别
    #定义日志级别。
    #可以是下面的这些值：
    #debug（记录大量日志信息，适用于开发、测试阶段）
    #verbose（较多日志信息）
    #notice（适量日志信息，使用于生产环境）
    #warning（仅有部分重要、关键信息才会被记录）
logfile /data/redis/redis_6379.log  #日志文件
databases 16                        #有16个db库
save 900 1                           
save 300 10
save 60 10000
    #存 DB 到磁盘：
    #格式：save &lt;间隔时间（秒）&gt; &lt;写入次数&gt;
    #根据给定的时间间隔和写入次数将数据保存到磁盘
    #下面的例子的意思是：
    #900 秒内如果至少有 1 个 key 的值变化，则保存
    #300 秒内如果至少有 10 个 key 的值变化，则保存
    #60 秒内如果至少有 10000 个 key 的值变化，则保存
    #注意：你可以注释掉所有的 save 行来停用保存功能。
    #也可以直接一个空字符串来实现停用：
    #save &quot;&quot;
stop-writes-on-bgsave-error yes
    #如果用户开启了RDB快照功能，那么在redis持久化数据到磁盘时如果出现失败，默认情况下，redis会停止接受所有的写请求。
    #这样做的好处在于可以让用户很明确的知道内存中的数据和磁盘上的数据已经存在不一致了。
    #如果redis不顾这种不一致，一意孤行的继续接收写请求，就可能会引起一些灾难性的后果。
    #如果下一次RDB持久化成功，redis会自动恢复接受写请求。
    #如果不在乎这种数据不一致或者有其他的手段发现和控制这种不一致的话，可以关闭这个功能，
    #以便在快照写入失败时，也能确保redis继续接受新的写请求。
rdbcompression yes
    #对于存储到磁盘中的快照，可以设置是否进行压缩存储。
    #如果是的话，redis会采用LZF算法进行压缩。如果你不想消耗CPU来进行压缩的话，
    #可以设置为关闭此功能，但是存储在磁盘上的快照会比较大。
rdbchecksum yes
    #在存储快照后，我们还可以让redis使用CRC64算法来进行数据校验，但是这样做会增加大约10%的性能消耗，
    #如果希望获取到最大的性能提升，可以关闭此功能。
dbfilename dump.rdb  #设置快照的文件名
dir /data/redis/db/  #快照的位置
slave-serve-stale-data yes   
    #当一个 slave 与 master 失去联系，或者复制正在进行的时候，
    #slave 可能会有两种表现：
    #1) 如果为 yes ，slave 仍然会应答客户端请求，但返回的数据可能是过时，
    #  或者数据可能是空的在第一次同步的时候 
    #2) 如果为 no ，在你执行除了 info he salveof 之外的其他命令时，
    #  slave 都将返回一个 &quot;SYNC with master in progress&quot; 的错误
slave-read-only yes   #slave 模式为只读
repl-diskless-sync no 
    # 主从数据复制是否使用无硬盘复制功能。
    #新的从站和重连后不能继续备份的从站，需要做所谓的“完全备份”，即将一个RDB文件从主站传送到从站。
    #这个传送有以下两种方式：
    #1）硬盘备份：redis主站创建一个新的进程，用于把RDB文件写到硬盘上。过一会儿，其父进程递增地将文件传送给从站。
    #2）无硬盘备份：redis主站创建一个新的进程，子进程直接把RDB文件写到从站的套接字，不需要用到硬盘。
    #在硬盘备份的情况下，主站的子进程生成RDB文件。一旦生成，多个从站可以立即排成队列使用主站的RDB文件。
    #在无硬盘备份的情况下，一次RDB传送开始，新的从站到达后，需要等待现在的传送结束，才能开启新的传送。
    #如果使用无硬盘备份，主站会在开始传送之间等待一段时间（可配置，以秒为单位），希望等待多个子站到达后并行传送。
    #在硬盘低速而网络高速（高带宽）情况下，无硬盘备份更好。
repl-diskless-sync-delay 5
    #当启用无硬盘备份，服务器等待一段时间后才会通过套接字向从站传送RDB文件，这个等待时间是可配置的。
    #这一点很重要，因为一旦传送开始，就不可能再为一个新到达的从站服务。从站则要排队等待下一次RDB传送。因此服务器等待一段
    #时间以期更多的从站到达。
    #延迟时间以秒为单位，默认为5秒。要关掉这一功能，只需将它设置为0秒，传送会立即启动。
repl-disable-tcp-nodelay no #同步之后是否禁用从站上的TCP_NODELAY
slave-priority 100
    #从站优先级是可以从redis的INFO命令输出中查到的一个整数。当主站不能正常工作时
    #redis sentinel使用它来选择一个从站并将它提升为主站。
    #低优先级的从站被认为更适合于提升，因此如果有三个从站优先级分别是10， 
    #100，25，sentinel会选择优先级为10的从站，因为它的优先级最低。
appendonly no
    #默认redis使用的是rdb方式持久化，这种方式在许多应用中已经足够用了。但是redis如果中途宕机，
    #会导致可能有几分钟的数据丢失，根据save来策略进行持久化，Append Only File是另一种持久化方式，
    #可以提供更好的持久化特性。Redis会把每次写入的数据在接收后都写入appendonly.aof文件，
    #每次启动时Redis都会先把这个文件的数据读入内存里，先忽略RDB文件。
appendfilename &quot;appendonly.aof&quot;  aof文件名
appendfsync everysec
    #aof持久化策略的配置
    #no表示不执行fsync，由操作系统保证数据同步到磁盘，速度最快。
    #always表示每次写入都执行fsync，以保证数据同步到磁盘。
    #everysec表示每秒执行一次fsync，可能会导致丢失这1s数据
no-appendfsync-on-rewrite no
    # 在aof重写或者写入rdb文件的时候，会执行大量IO，此时对于everysec和always的aof模式来说，
    # 执行fsync会造成阻塞过长时间，no-appendfsync-on-rewrite字段设置为默认设置为no。
    # 如果对延迟要求很高的应用，这个字段可以设置为yes，否则还是设置为no，这样对持久化特性来说这是更安全的选择。
    # 设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入，默认为no，建议yes。
    # Linux的默认fsync策略是30秒。可能丢失30秒数据。
auto-aof-rewrite-percentage 100 
    # aof自动重写配置，当目前aof文件大小超过上一次重写的aof文件大小的百分之多少进行重写，
    # 即当aof文件增长到一定大小的时候，Redis能够调用bgrewriteaof对日志文件进行重写。
    # 当前AOF文件大小是上次日志重写得到AOF文件大小的二倍（设置为100）时，自动启动新的日志重写过程。
auto-aof-rewrite-min-size 64mb
    # 设置允许重写的最小aof文件大小，避免了达到约定百分比但尺寸仍然很小的情况还要重写
aof-load-truncated yes
    #aof文件可能在尾部是不完整的，当redis启动的时候，aof文件的数据被载入内存。
    #重启可能发生在redis所在的主机操作系统宕机后，尤其在ext4文件系统没有加上data=ordered选项，出现这种现象
    #redis宕机或者异常终止不会造成尾部不完整现象，可以选择让redis退出，或者导入尽可能多的数据。
    #如果选择的是yes，当截断的aof文件被导入的时候，会自动发布一个log给客户端然后load。
    #如果是no，用户必须手动redis-check-aof修复AOF文件才可以。
lua-time-limit 5000      
    #如果达到最大时间限制（毫秒），redis会记个log，然后返回error。当一个脚本超过了最大时限。
    #只有SCRIPT KILL和SHUTDOWN NOSAVE可以用。第一个可以杀没有调write命令的东西。
    #要是已经调用了write，只能用第二个命令杀
slowlog-log-slower-than 10000
    # slog log是用来记录redis运行中执行比较慢的命令耗时。
    # 当命令的执行超过了指定时间，就记录在slow log中，slog log保存在内存中，所以没有IO操作。
    # 执行时间比slowlog-log-slower-than大的请求记录到slowlog里面，单位是微秒，所以1000000就是1秒。
    # 注意，负数时间会禁用慢查询日志，而0则会强制记录所有命令。
slowlog-max-len 128
    # 慢查询日志长度。当一个新的命令被写进日志的时候，最老的那个记录会被删掉，这个长度没有限制。
    # 只要有足够的内存就行，你可以通过 SLOWLOG RESET 来释放内存
latency-monitor-threshold 0
    # 延迟监控功能是用来监控redis中执行比较缓慢的一些操作，用LATENCY打印redis实例在跑命令时的耗时图表。
    # 只记录大于等于下边设置的值的操作，0的话，就是关闭监视。
    # 默认延迟监控功能是关闭的，如果你需要打开，也可以通过CONFIG SET命令动态设置。
notify-keyspace-events &quot;&quot;
    #键空间通知使得客户端可以通过订阅频道或模式，来接收那些以某种方式改动了 Redis 数据集的事件。因为开启键空间通知功能需要消耗一些 CPU #，所以在默认配置下，该功能处于关闭状态。
    #notify-keyspace-events 的参数可以是以下字符的任意组合，它指定了服务器该发送哪些类型的通知：
    #K 键空间通知，所有通知以 __keyspace@__ 为前缀
    #E 键事件通知，所有通知以 __keyevent@__ 为前缀
    #g DEL 、 EXPIRE 、 RENAME 等类型无关的通用命令的通知
    #$ 字符串命令的通知
    #l 列表命令的通知
    #s 集合命令的通知
    #h 哈希命令的通知
    #z 有序集合命令的通知
    #x 过期事件：每当有过期键被删除时发送
    #e 驱逐(evict)事件：每当有键因为 maxmemory 政策而被删除时发送
    #A 参数 g$lshzxe 的别名
    #输入的参数中至少要有一个 K 或者 E，否则的话，不管其余的参数是什么，都不会有任何 通知被分发。
hash-max-ziplist-entries 512
    #hash类型的数据结构在编码上可以使用ziplist和hashtable。
    #ziplist的特点就是文件存储(以及内存存储)所需的空间较小,在内容较小时,性能和hashtable几乎一样。
    #因此redis对hash类型默认采取ziplist。如果hash中条目的条目个数或者value长度达到阀值,将会被重构为hashtable。
    #这个参数指的是ziplist中允许存储的最大条目个数，，默认为512，建议为128
hash-max-ziplist-value 1024
    #ziplist中允许条目value值最大字节数，默认为64，建议为1024
list-max-ziplist-size -2
    #当取正值的时候，表示按照数据项个数来限定每个quicklist节点上的ziplist长度。比如，当这个参数配置成5的时候，表示每个quicklist节点的ziplist#最多包含5个数据项。
    #当取负值的时候，表示按照占用字节数来限定每个quicklist节点上的ziplist长度。这时，它只能取-1到-5这五个值，每个值含义如下：
    #-5: 每个quicklist节点上的ziplist大小不能超过64 Kb。（注：1kb =&gt; 1024 bytes）
    #-4: 每个quicklist节点上的ziplist大小不能超过32 Kb。
    #-3: 每个quicklist节点上的ziplist大小不能超过16 Kb。
    #-2: 每个quicklist节点上的ziplist大小不能超过8 Kb。（-2是Redis给出的默认值）
    #-1: 每个quicklist节点上的ziplist大小不能超过4 Kb。
list-compress-depth 0
    #这个参数表示一个quicklist两端不被压缩的节点个数。
    #注：这里的节点个数是指quicklist双向链表的节点个数，而不是指ziplist里面的数据项个数。
    #实际上，一个quicklist节点上的ziplist，如果被压缩，就是整体被压缩的。
    #参数list-compress-depth的取值含义如下：
    #0: 是个特殊值，表示都不压缩。这是Redis的默认值。
    #1: 表示quicklist两端各有1个节点不压缩，中间的节点压缩。
    #2: 表示quicklist两端各有2个节点不压缩，中间的节点压缩。
    #3: 表示quicklist两端各有3个节点不压缩，中间的节点压缩。
    #依此类推…
    #由于0是个特殊值，很容易看出quicklist的头节点和尾节点总是不被压缩的，以便于在表的两端进行快速存取。
set-max-intset-entries 512
    #数据量小于等于set-max-intset-entries用intset，大于set-max-intset-entries用set
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
    # 数据量小于等于zset-max-ziplist-entries用ziplist，大于zset-max-ziplist-entries用zset
hll-sparse-max-bytes 3000
    # value大小小于等于hll-sparse-max-bytes使用稀疏数据结构（sparse）
    # 大于hll-sparse-max-bytes使用稠密的数据结构（dense），一个比16000大的value是几乎没用的，
    # 建议的value大概为3000。如果对CPU要求不高，对空间要求较高的，建议设置到10000左右
activerehashing yes
    #Redis将在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash，可以降低内存的使用。
    #当你的使用场景中，有非常严格的实时性需要，不能够接受Redis时不时的对请求有2毫秒的延迟的话，把这项配置为no。
    #如果没有这么严格的实时性要求，可以设置为yes，以便能够尽可能快的释放内存
client-output-buffer-limit normal 0 0 0
    # 对客户端输出缓冲进行限制可以强迫那些不从服务器读取数据的客户端断开连接，用来强制关闭传输缓慢的客户端。
    #对于normal client，第一个0表示取消hard limit，第二个0和第三个0表示取消soft limit，normal #client默认取消限制，因为如果没有寻问，他们是不会接收数据的
client-output-buffer-limit slave 256mb 64mb 60
    # 对于slave client和MONITER client，如果client-output-buffer一旦超过256mb，又或者超过64mb持续60秒，那么服务器就会立即断开客户端连接。
client-output-buffer-limit pubsub 32mb 8mb 60
    # 对于pubsub client，如果client-output-buffer一旦超过32mb，又或者超过8mb持续60秒，那么服务器就会立即断开客户端连接。
hz 10
    #redis执行任务的频率为1s除以hz
aof-rewrite-incremental-fsync yes
    # 在aof重写的时候，如果打开了aof-rewrite-incremental-fsync开关，系统会每32MB执行一次fsync。
    # 这对于把文件写入磁盘是有帮助的，可以避免过大的延迟峰值
</code></pre>

<h4>3. 关于master的部署</h4>
<pre><code>cd /usr/local/src       #切换目录到 /usr/local/src
wget http://download.redis.io/releases/redis-3.2.11.tar.gz     #进行下载redis包
tar zxvf redis-3.2.11.tar.gz  #进行解压文件
mkdir -p /usr/local/software  #创建目录
cd redis-3.2.11               #切换目录
make MALLOC=libc              #进行编译
make PREFIX=/usr/local/software/redis install  #进行安装并指定安装位置
cp redis.conf /usr/local/software/redis/ #复制配置文件到相应目录
mkdir -p /data/redis/db/   #创建存储redis db的目录
vim /usr/local/software/redis/redis.conf  #修改配置文件 配置详情 
/usr/local/software/redis/bin/redis-server /usr/local/software/redis/redis.conf 

#info replication  （查看主从）
</code></pre>

<h4>4. 关于slave的部署</h4>
<pre><code>cd /usr/local/src       #切换目录到 /usr/local/src
wget http://download.redis.io/releases/redis-3.2.11.tar.gz     #进行下载redis包
tar zxvf redis-3.2.11.tar.gz  #进行解压文件
mkdir -p /usr/local/software  #创建目录
cd redis-3.2.11               #切换目录
make MALLOC=libc              #进行编译
make PREFIX=/usr/local/software/redis install  #进行安装并指定安装位置
cp redis.conf /usr/local/software/redis/ #复制配置文件到相应目录
mkdir -p /data/redis/db/   #创建存储redis db的目录
vim /usr/local/software/redis/redis.conf  #修改配置文件 配置详情 
/usr/local/software/redis/bin/redis-server /usr/local/software/redis/redis.conf 
</code></pre>

<h4>5. 关于sentinel的部署</h4>
<pre><code>cd /usr/local/src       #切换目录到 /usr/local/src
wget http://download.redis.io/releases/redis-3.2.11.tar.gz     #进行下载redis包
tar zxvf redis-3.2.11.tar.gz  #进行解压文件
mkdir -p /usr/local/software  #创建目录
cd redis-3.2.11               #切换目录
make MALLOC=libc              #进行编译
make PREFIX=/usr/local/software/redis install  #进行安装并指定安装位置
cp sentinel.conf /usr/local/software/redis/ #复制配置文件到相应目录
mkdir -p /data/redis/         #创建存储redis目录
vim /usr/local/software/redis/sentinel.conf  #修改配置文件 配置详情 
###############################
daemonize yes
bind 0.0.0.0       #如果不绑定，默认是127.0.0.1
logfile /data/redis/sentinel.log 
port 26379         #当前Sentinel服务运行的端口
dir /data/redis/   #Sentinel服务运行时使用的临时文件夹
sentinel monitor mymaster 192.168.254.131 6379 2 #Sentinel去监视一个名为mymaster的主redis实例，这个主实例的IP地址为本机地址192.168.254.131，端口号为6379，而将这个主实例判断为失效至少需要2个 Sentinel进程的同意，只要同意Sentinel的数量不达标，自动failover就不会执行
sentinel auth-pass mymaster foobared             #需要进行密码认证
sentinel down-after-milliseconds mymaster 30000  #指定了Sentinel认为Redis实例已经失效所需的毫秒数。
sentinel parallel-syncs mymaster 1               #指定了在执行故障转移时，最多可以有多少个从Redis实例在同步新的主实例，在从Redis实例较多的情况下这个数&gt;字越小，同步的时间越长，完成故障转移所需的时间就越长
sentinel failover-timeout mymaster 180000        #如果在该时间（ms）内未能完成failover操作，则认为该failover失败 
#################################
/usr/local/software/redis/bin/redis-server /usr/local/software/redis/sentinel.conf --sentinel  #启动
#关闭
/usr/local/software/redis/bin/redis-cli -h 127.0.0.1 -p 26379 -a foobared shutdown
</code></pre>

<h4>6. 关于检看连接的情况</h4>
<pre><code>/usr/local/software/redis/bin/redis-cli -h 127.0.0.1 -p 26379 -a foobared
&gt;info
</code></pre>


</body>
</html>
<!-- This document was created with MarkdownPad, the Markdown editor for Windows (http://markdownpad.com) -->
